TerraformでGoogle Cloudを扱うためのローカル端末環境構築
Google Cloudデビューしました。初っ端からTerraformを強制されているわけではないのですが、どうしてもTerraformを使う必要がありました。Google Cloudの知識がない状態で調べながら設定していきます。
目的
- Terraformに必要なGoogle Cloudの秘密鍵(認証情報)を発行する
- ローカル端末からTerraformを使ってGoogle Cloud上にリソースを作成する
Terraformの導入
MacへTerraform導入方法は以下のブロブポストを参照ください。
環境情報
項目 | 値 |
---|---|
Mac | Mac OS X 10.15.7 |
Terraform | v1.0.0 |
TerraformのGoogle Cloud設定
以下リンクのTerraformのドキュメントを参考に進めます。結局、わからないこといっぱいでいろいろと調べながら進めました。文中には要所要所で参照したリンクを、最後には全体通して参考にさせて頂いたサイトをまとめています。
Terraformは動作確認用のリソースを作成するだけです。メインはTerraformを実行するためのGoogle Cloudの秘密鍵(認証情報)をどう作成して、どうTerraformで使うかです。
- Google Cloudで秘密鍵(認証情報)を発行しダウンロード
- Terraformを実行して、Google Cloud上にVPC(Virtual Private Cloud)を作成
- Terraformでリソース作成できたこと確認
Google Cloud設定
実現したいことは特定のプロジェクトに対してローカル端末からTerraformを実行してリソースを作成したいです。プロジェクトに対して必要な秘密鍵・権限を持つサービスアカウントを作成し、秘密鍵をローカル端末に保存することになりました。
最初にプロジェクトを作成します。プロジェクトIDはohmura-yasutaka
としたプロジェクトを作成しました。
Google Cloud Shellからサービスアカウントの作成と、権限の付与を行います。GCPコンソールから権限付与の方法がわからなく諦めた結果CLIが早かったです。また、ローカル端末でgcloud
コマンドを打てる環境も用意できていないため、WEBブラウザからGCPコンソールへログインしCloud Shellを活用してコマンドを実行していきます。
gcloud config set project [PROJECT_ID]
コマンドでこれから作業するプロジェクトを指定します。
gcloud config set project ohmura-yasutaka
gcloud iam service-accounts create
コマンドでサービスアカウントを作成しました。サービスアカウントは人以外使う用途のユーザです。今回はTerraform用のユーザとしてサービスアカウントを用意します。
gcloud iam service-accounts create terraform-account \ --display-name "Used by Terraform on the local machine"
次にサービスアカウントに権限を付与します。サービスアカウントterraform-account
に対してgcloud projects add-iam-policy-binding
コマンドで編集者(Editor)ロールを付与しました。権限がオーナー(Owner)よりは弱い権限ではあるのですがGoogle Cloud初見で最小権限に絞るのは無理がありました。terraform apply
を打てるのは数カ月後のことでしょう、現時点ではEditorが妥当と判斷として設定します。
gcloud projects add-iam-policy-binding ohmura-yasutaka \ --member serviceAccount:terraform-account@ohmura-yasutaka.iam.gserviceaccount.com \ --role roles/editor
GCPコンソールからサービスアカウントを開きました。コマンドで作成したサービスアカウントの権限タブから確認するとメンバーに作成したサービスアカウント名が追加され、ロールに編集者(Editor)として登録されていました。
最後に秘密鍵を作成しファイルをダウンロードします。鍵の管理をクリック。
新しい鍵を作成をクリック。
JSON形式で作成します。
JSONファイルがダウンロードされました。
ダウンロードしたファイルは任意の場所に保存します。鍵の名前はaccount.json
にリネームしました。
Terraform実行テスト
東京リージョンにVPCを作成して秘密鍵が有効か、リソースを作成する権限はあるのか確かめます。Google CloudのProviderの最新バージョンは以下のリンクより確認しました。
terraform { required_providers { google = { source = "hashicorp/google" version = "3.72.0" } } } provider "google" { credentials = file("ダウンロードしたJSONファイルへのフルパス") project = "ohmura-yasutaka" region = "asia-northeast1" zone = "asia-northeast1-a" } resource "google_compute_network" "vpc_network" { name = "terraform-network" }
terraform init
で初期化とGoogle CloudのProviderをダウンロードして、terraform apply
でリソース作成します。
$ terraform init $ terraform plan $ terraform apply
問題なく終了しました。秘密鍵、権限は問題ないようです。
GCPコンソールからVPCの作成を確認しました。本当に問題ないようです。
作成したリソースを削除します。
$ terraform destroy
GCPコンソールからだと削除したできたという証明のキャプチャが難しかったので、Cloud ShellからVPC一覧を確認しました。defaultのVPC以外存在していないことが確認できました。これでTerraformでGoogle Cloudを管理できる!
$ gcloud compute networks list NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 default AUTO REGIONAL
目的は達成しました。手を動かすときはTerraformでGoogle Cloudにリソース作成できる最低限の環境を準備できました。
おわりに
Google Cloudではサービスアカウントと権限付与だけできれば、後はTerraformのお作法の話になります。Google Cloud初見でがんばるポイントはわずかでした。用語がわからなくて調べながらだったので時間はかかりましたが。Google Cloudの秘密鍵(JSONファイル)をTerraformへ渡す方法は他にもあるようなので改めて調べてみます。ここについて以下のリンクを見て思いました。